package com.cheyunkeji.er.app;

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

import java.util.Set;

/**
 * 使用SharedPreferences存储配置管理
 *
 */
public class MyPreferencesManager {
    public SharedPreferences mPreferences = null;
    private SharedPreferences.Editor mEditor = null;

    /**
     * 使用包名作为配置文件名的配置管理器
     *
     * @param context
     */
    public MyPreferencesManager(Context context) {
        this.mPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
        mEditor = mPreferences.edit();
    }

    /**
     * 指定配置文件名的配置管理器
     *
     * @param context
     * @param fileName
     */
    public MyPreferencesManager(Context context, String fileName) {
        this.mPreferences = context.getApplicationContext().getSharedPreferences(fileName, Context.MODE_APPEND);
        mEditor = mPreferences.edit();
    }

    /**
     * 清空所有数据
     */
    public void clear() {
        mEditor.clear().apply();
    }

    /**
     * 移除指定KEY的数据
     *
     * @param key
     */
    public void remove(String key) {
        mEditor.remove(key).apply();
    }

    /**
     * 保存任意的对象
     *
     * @param key   保存对象的key
     * @param value 保存对象数据
     */
    public void put(String key, Object value) {
        if (value instanceof String) {
            mEditor.putString(key, (String) value);
        } else if (value instanceof Boolean) {
            mEditor.putBoolean(key, (Boolean) value);
        } else if (value instanceof Integer) {
            mEditor.putInt(key, (Integer) value);
        } else if (value instanceof Long) {
            mEditor.putLong(key, (Long) value);
        } else if (value instanceof Float) {
            mEditor.putFloat(key, (Float) value);
        } else {
            mEditor.putString(key, value.toString());
        }
        mEditor.apply();
    }

    /**
     * 保存String类型的数组集合
     *
     * @param key
     * @param values
     */
    public void putStringSet(String key, Set<String> values) {
        mEditor.putStringSet(key, values).apply();
    }

    /**
     * 保存String类型数据
     *
     * @param key
     * @param value
     */
    public void putString(String key, String value) {
        mEditor.putString(key, value).apply();
    }

    /**
     * 保存Boolean 布尔值数据
     *
     * @param key
     * @param bool
     */
    public void putBool(String key, Boolean bool) {
        mEditor.putBoolean(key, bool).apply();
    }

    /**
     * 保存Integer类型数据
     *
     * @param key
     * @param value
     */
    public void putInt(String key, int value) {
        mEditor.putInt(key, value).apply();
    }

    /**
     * 保存Long类型数据
     *
     * @param key
     * @param value
     */
    public void putLong(String key, long value) {
        mEditor.putLong(key, value).apply();
    }

    /**
     * 保存Float类型数据
     *
     * @param key
     * @param value
     */
    public void putFloat(String key, float value) {
        mEditor.putFloat(key, value).apply();
    }

    /**
     * 获取String字符串数据
     *
     * @param key
     * @param defValue
     * @return
     */
    public String getString(String key, String defValue) {
        return mPreferences.getString(key, defValue);
    }

    /**
     * 获取Boolean布尔值数据
     *
     * @param key
     * @param defValue
     * @return
     */
    public boolean getBool(String key, boolean defValue) {
        return mPreferences.getBoolean(key, defValue);
    }

    public int getInt(String key, int defValue) {
        return mPreferences.getInt(key, defValue);
    }

    /**
     * 获取Long类型的数据
     *
     * @param key
     * @param defValue
     */
    public long getLong(String key, long defValue) {
        return mPreferences.getLong(key, defValue);
    }

    /**
     * 获取Float类型数据
     *
     * @param key
     * @param defValue
     * @return
     */
    public float getFloat(String key, float defValue) {
        return mPreferences.getFloat(key, defValue);
    }
}
